package com.etalk.crm.service;

import com.etalk.crm.pojo.WorkflowApproval;
import com.etalk.crm.pojo.WorkflowCreate;
import com.etalk.crm.pojo.WorkflowResult;
import com.github.pagehelper.PageInfo;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * @author Jordan
 */
public interface WorkflowService {

    /**
     * 查询工作流列表
     * @param record 查询条件
     * @param pageNum 页码
     * @param pageSize 页记录数
     * @return
     */
    PageInfo<WorkflowResult> searchWorkflowPage(WorkflowResult record, int pageNum, int pageSize);

    /**
     * 查询课程中未创建的工作流种类
     * @param processSettingId  工作流id
     * @return
     */
    List<Map<String,Object>> searchWorkflowQuestionTypeList(int processSettingId);

    /**
     * 初始化创建工作流数据
     * @param lessonId 课程id
     * @return
     */
    Map<String,Object> searchInitWorkflow(int lessonId);

    /**
     * 查询工作流类型列表
     * @return
     */
    List<WorkflowResult> searchWorkflowList();

    /**
     * 初始化修改工作流信息
     * @param workflowId 工作流id
     * @return
     */
    Map<String,Object> searchInitEditWorkflow(int workflowId);

    /**
     * 审批数据初始化
     * @param workerId 工作流id
     * @return
     */
    Map<String,Object> searchViewApprovalInfo(long workerId);

    /**
     * 查询节点需要的操作
     * @param approvalId 流程id
     * @return
     */
    Map<String,Object> searchInitApprovalInfo(int approvalId);

    /**
     * 创建工作流
     * @param record 工作流信息
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    int addWorkflow(WorkflowCreate record);

    /**
     * 修改工作流内容
     * @param record 修改后的信息
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    int editWorkflow(WorkflowCreate record);

    /**
     * 撤回工作流
     * @param workflowId 工作流id
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    int revokeWorkflow(long workflowId);

    /**
     * 审批工作流
     * @param record 工作流审批信息
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    int addApproval(WorkflowApproval record);
}
